Cours : Interblocage

 
 
Dans un système multiprocessus, l' ordonnanceur alloue le processeur à chaque processus selon un algorithme d' ordonnancement : la politique choisie conditionne l'ordre d'exécution des processus et très souvent, les exécutions des processus s'entrelacent les unes avec les autres. Chaque processus dispose d'un espace d'adressage propre et indépendant, protégé par rap port aux autres processus. Malgré tout, les processus peuvent avoir besoin de communiquer entre eux pour échanger des données par exemple : ils ne sont donc pas totalement indépendants et effectuent des accès concurrents aux ressource s logicielles ou matérielles.
Définition : Ressource
Une ressource désigne toute entité dont a besoin un processus pour s'exécuter. La ressource peut être matérielle comme le processeur ou en périphérique ou elle peut être logicielle comme une variable. Une ressource est caractérisée :
  • Par un état : elle est libre ou occupée
  • Par son nombre de points d'accès, c'est-à-dire le nombre de processus pouvant l’utiliser en même temps.
 
 
L’utilisation d'une ressource par un processus s’effectue en trois étapes : lorsque le processus a besoin de la ressource il s'alloue cette ressource : c'est l'étape d'allocation de ressources. Une fois que le processus a pu obtenir la ressource, il utilise la ressource durant un certain temps puis il rend la ressource : c'est l'étape de restitution de la ressource. Les phases d'allocation et de restitution d'une ressources doivent assurer que la ressource est utilisée conformément à son nombre de points d’accès

1 Définitions des situations d’interblocage, de famine et de coalition

Définition : Interblocage
Un ensemble de n processus est dit en situation d’interblocage lorsque l'ensemble de ces n processus attend chacun une ressource déjà possédée par un autre processus de l'ensemble. Dans une telle situation aucun processus ne peut poursuivre son exécution. L'attente des processus est infinie.
 
 
Considérons un exemple. Soient deux ressources R1 et R2 qui sont toutes les deux à un seul point d’accès c’est-à-dire que seul un processus à la fois a le droit d’utiliser la ressource. Soient également deux processus P1 et P2. Ils utilisent tous les deux les ressources R1 et R2 pour effectuer un traitement. Les processus P1 et P2 sont programmés tels que P1 demande d'abord à s'allouer R1 puis R2 avant de commencer son traitement tandis que le processus P2 demande d'abord à s'allouer la ressource R2 puis la ressource R1 avant de commencer son traitement. Les deux processus sont prêts à s'exécuter. L'ordonnanceur choisit d'abord d’exécuter P1. P1 demande à prendre la ressource R1 et comme les ressources sont initialement libres, P1 obtient la ressource R1. Puis l’ordonnanceur commute et choisit maintenant d'exécuter le processus P2. P2 demande à s'allouer la ressource R2 et puisque la ressource R2 est libre, P2 obtient la ressource R2. Maintenant P2 continue son exécution et demande à accéder à la ressource R1. P2 est bloqué puisque R1 a été allouée au processus P1. Puisque P2 est bloqué, l' ordonnanceur reprend l'exécution de P1 qui demande pour sa part maintenant à accéder à la ressource R2. Comme R2 a été allouée au processus P2, P1 est à son tour bloqué. Les deux processus P1 et P2 sont maintenant en situation d'interblocage : en effet le processus P1 attend le processus P2 pour disposer de la ressource R2 tandis que le processus P2 attend le processus P1 pour disposer de la ressource R1.Comme aucun des deux processus ne peut poursuivre son exécution et donc rendre les ressource s qu'il possède, le blocage est permanent : on dit que les processus P1 et P2 sont en situation d'interblocage (ou étreinte fatale).
Définition : Coalition et famine
On parle de coalition de n processus contre p autres processus lorsqu’ un ensemble de n processus monopolisent des ressources au détriment des p autres processus. On dit également que les p processus qui ne peuvent pas s'exécuter faute de ressources sont en situation de famine.

2 Conditions nécessaires à l’obtention d’un interblocage

 
 
Les quatre conditions listées ci-dessus doivent être simultanément vérifiées pour qu'un interblocage puisse se produire : 
  • Exclusion mutuelle  : une ressource au moins doit se trouver dans un mode non partageable
  • Occupation et attente : un processus au moins occupant une ressource attend d'acquérir des ressources supplémentaires détenues par d'autres processus. Les processus demandent les ressources au fur et à mesure de leur exécution.
  • Pas de réquisition : les ressources sont libérées sur seule volonté des processus les détenant
  • Attente circulaire : il existe un cycle d’attente entre au moins deux processus. Les processus impliqués dans ce cycle sont en interblocage.
 
 
La figure 1 donne un exemple d’attente circulaire entre deux processus P1 et P2. Les deux processus P1 et P2 utilisent les trois mêmes ressources : un lecteur de bandes magnétiques, un disque dur et une imprimante. Le processus P1 commence par demander la bande magnétique puis l'imprimante et enfin le disque avant d'effectuer son traitement. Le processus P2 commence par demander le disque puis l'imprimante et enfin la bande magnétique avant de commencer son traitement. Sur le schéma de la figure 1, le processus P1 s'est exécuté et a obtenu la bande magnétique ainsi que l'imprimante. Le processus P2 lui a obtenu le disque et il demande maintenant à obtenir l'imprimante. L'imprimante a déjà été allouée au processus P1, donc le processus P2 est bloqué. Le processus P1 ne peut pas poursuivre son exécution car il est en attente du disque qui a déjà été alloué au processus P2. On a donc une attente circulaire entre P1 et P2 : en effet le processus P2 attend l'imprimante détenue par le processus P1 tandis que le processus P1 attend le disque détenu par le processus P2. .
Fig 1 : Un exemple d’attente circulaire

3 Les différentes méthodes de traitement des interblocages

 
 
Il y a 4 méthodes de traitement des situations d'interblocage : les politiques de guérison, les politiques de prévention ou d'évitements et la politique de "l'autruche".

3.1 Les politiques de guérison

 
 
Une première politique est celle de détection/guérison des interblocages. Dans cette politique on autorise les interblocages à se produire, on les détecte et on les résout. Pour cette politique, le système maintient un graphe représentant l'allocation des ressources et les attentes des processus. Dans ce graphe dont un exemple est donné sur la figure 2, on distingue deux types de sommets : les processus figurés par un rond et les ressources figurées par un rectangle. Une flèche depuis un rectangle vers un rond indique que la ressource a été allouée au processus. A contrario une flèche depuis un rond vers un rectangle indique que le processus attend la ressource . Un cycle dans le graphe indique la présence d'un interblocage et tous les processus appartenant à ce cycle sont en interblocage. Ainsi dans la figure 2, le graphe présente deux cycles. Un premier cycle existe entre le processus P1, le processus P2, la ressource R1 et la ressource R2. Un second cycle existe qui englobe le processus P1, le processus P2, le processus P3 ainsi que les ressources R1, R3 et R2. 
Le système met à jour le graphe à chaque nouvelle allocation de ressources ou demande d'allocation de ressources. Régulièrement le système parcourt le graphe à la recherche de cycle. Si un cycle est découvert, celui-ci est cassé en avortant les processus en interblocage appartenant au cycle. Ainsi sur l'exemple de la figure 2, l' interblocage est cassé en avortant le processus P2 et en réallouant la ressource R1 au processus P1.
Ce type de politique présente plusieurs difficultés. Sa mise en oeuvre est coûteuse. Il faut maintenir le graphe d'allocation, régulièrement parcourir le graphe à la recherche de cycles et enfin remédier à l'interblocage par destruction de processus. Une autre difficulté tient à la période de parcours du graphe : si cette période est petite, le graphe est parcouru souvent et consomme ainsi les ressources du système inutilement car la probabilité d’un interblocage est faible. Si la période de parcours est grande, le graphe sera parcouru moins souvent et la probabilité de trouver un interblocage sera plus forte. Mais, le nombre de processus impliqués dans un l’interblocage risque d’être d’autant plus grand que la période de parcours du graphe est grande. Par ailleurs le choix des processus à avorter pour remédier à un interblocage n’est pas forcément facile. Une solution est de systématiquement détruire tous les processus impliqués dans l’interblocage mais on peut essayer de raffiner cette solution en choisissant les processus à avorter : se pose ici le problème du choix qui va conduire à éliminer l’interblocage en minimisant le nombre de processus avortés ou le coût pour le système de ces avortements. Ainsi dans le cas de la figure 1, on pourra choisir d'avorter P2 plutôt que P1 car P1 détient déjà deux ressources sur trois.
Fig 2 : Graphe pour la politique de guérison

3.2 Les politiques de prévention

 
 
Dans les politiques de prévention, on ajoute des contraintes sur l'allocation des ressources afin de faire en sorte qu'au moins une des 4 conditions nécessaires à l'interblocage ne sera jamais vérifiée. Les deux seules conditions nécessaires sur lesquelles il est possible d'agir sont la condition d'occupation et d'attente ainsi que la condition d'attente circulaire. 
 
 
Pour la condition d’occupation et d’attente, on interdit à un processus de demander les ressources au fur et à mesure de ses besoins. Un processus ne peut démarrer son exécution que lorsque toutes les ressources ont pu lui être allouées (phase 0). Ainsi la deuxième condition d'occupation et attente ne peut jamais se produire. Cependant l'utilisation résultante des ressources est mauvaise puisqu'un processus dispose des ressources durant toute son exécution même s'il n'utilise celles-ci que pour un très petit temps.
 
 
Pour la condition d’attente circulaire, une solution est d'imposer un ordre total sur l'ordre d'allocations des différentes ressources du système : ainsi par exemple l'unité de bande doit toujours être demandée avant le disque et le disque doit lui-même être toujours demandé avant l'imprimante. Ainsi il ne peut pas se produire d'attente circulaire.

3.3 Les politiques d’évitement

 
 
La troisième catégorie de solutions est celle des politiques d'évitement : ici, à chaque demande d'allocation de ressource faite par un processus, le système déroule un algorithme appelé algorithme de sureté qui regarde si cette allocation peut mener le système en interblocage. L’algorithme de sureté utilise des informations fournies par les processus notamment pour chaque processus, leur plus grand besoin possible en ressources. Si tel est le cas, l'allocation est retardée. C’est une vision pessimiste qui prédomine car l’allocation est interdite dès que la possibilité de l’interblocage est détectée. Mais cela ne veut pas dire que cet interblocage aura réellement lieu. Un exemple de la mise en œuvre de cette politique est l’algorithme appelé algorithme du banquier.

3.4 La politique de l’autruche 

 Une dernière solution, très simple, est de nier l'existence des interblocages et donc de ne rien prévoir pour les traiter. Simplement la machine est redémarrée lorsque trop de processus sont en interblocage. Les trois premières stratégies évoquées (prévention, évitement détection/guérison) sont des politiques qui coûtent excessivement chères à mettre en œuvre. Aussi, comme la fréquence des interblocages dans un système est relativement faible, la politique de l'autruche qui paraît dans un premier abord très "curieuse" se justifie souvent.
Interblocage Interblocage